package com.cskaoyan.javase.homework.day05;

/**
 * @description: 面向对象基础语法练习
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 定义一个Student类：
 * 	要求包含4个成员变量 String name, int age, String gender, int stuId
 * 	定义5个构造方法
 *       分别为：
 *       	1，无参构造
 *      	2，初始化name成员变量值的单参构造方法
 *      	3，初始化name和stuId两个成员变量值的双参构造方法
 *      	4，初始化name，age，gender三个成员变量值的三参构造方法
 *      	5，初始化name，age，gender，stuId这4个成员变量值的4参构造方法
 *      思考：再上面5个构造方法的基础上，再定义一个构造方法单独给gender赋值，能够做到吗？为什么？
 *          不可以，因为不符合方法重载的定义
 *      最后再定义一个成员方法print()，打印这个学生类对象信息(建议使用this增加代码可读性)
 *
 * 定义完这个类后，创建两个Student对象分别为stu1和stu2
 * 	要求stu1对象的四个成员变量name, age, gender, stuId的值分别为“张三”,18,"男", 1
 *     要求stu2对象的四个成员变量name, age, gender, stuId的值分别为“李四”,25,"女", 2
 *     两个对象分别调用print()方法
 *     两次调用方法输出的结果相同吗？
 *     为什么？
 *
 */
public class StudentDemo {
    public static void main(String[] args) {
        Student s = new Student("法外狂徒-张三", 28, "男性", 18);
        s.printStu();

        Student s2 = new Student("最强男团-赵四", 38, "男性", 10);
        s2.printStu();
    }
}


class Student {
    //成员变量
    String name;
    int age;
    String gender; //isMale isFemale
    int stuId;

    public Student(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public Student(String name, int stuId) {
        this.name = name;
        this.stuId = stuId;
    }

    public Student(String name) {
        this.name = name;
    }

    //默认无参构造
    public Student() {
    }

    public Student(String name, int age, String gender, int stuId) {
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.stuId = stuId;
    }

    public void printStu() {
        System.out.println("该学生姓名为:" + this.name + "年龄是" + this.age + "学号为" + this.stuId + "性别为" + this.gender);
    }
}